package com.simple.common.entity.req.vm.pay;

import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import java.util.Map;
import java.util.function.Consumer;

/**
 * 直连支付参数示例
 *
 * @author yasud
 * @date 2020年09月23日 13:58
 * @description
 */
@Data
public class DirectPayReqV1  extends PayBase  {

    /**
     *信用卡持卡人名
     */
    @NotBlank(message = "信用卡持卡人名不能为空")
    private String firstName;

    /**
     * 信用卡持卡人姓
     */
    @NotBlank(message = "信用卡持卡人姓不能为空")
    private String lastName;

    /**
     * 信用卡卡号
     */
    @NotBlank(message = "信用卡卡号不能为空")
    @Size(min = 12, max = 19, message = "信用卡卡号长度错误")
    private String cardNo;

    /**
     * 信用卡过期年
     */
    @NotBlank(message = "过期年不能为空")
    @Pattern(regexp = "^\\d{4}$", message = "过期年无效")
    private String expireYear;

    /**
     * 信用卡过期月
     */
    @NotBlank(message = "过期月不能为空")
    @Pattern(regexp = "^((0([1-9]))|(1(0|1|2)))$", message = "过期月无效")
    private String expireMonth;

    /**
     * 信用卡cvv
     */
    @NotBlank(message = "信用卡Cvv 不能为空")
    @Size(min = 3, max = 4, message = "cvv无效")
    private String cvv;

    /**
     * 在这里写对拓展字段的检查
     */
    @Override
    protected Map<String, Consumer<Object>> predicateMapping() {
        return ImmutableMap.of(
                "email", v -> {
                    Preconditions.checkNotNull(v, "邮编不能为空");
                },
                "name", v -> {
                    Preconditions.checkNotNull(v, "商品名称不能为空");
                },
//                "sourceUrl", v -> {
//                    Preconditions.checkNotNull(v, "交易地址不能为空");
//                },
                "ipAddress", v -> {
                    Preconditions.checkNotNull(v, "ip地址不能为空");
                }
        );
    }

    @Override
    public void check(Consumer<ReqBase>... consumers) {
        Preconditions.checkNotNull(getExtraInfo(), "拓展字段不能为空");
        super.check();
    }
}
